home *** CD-ROM | disk | FTP | other *** search
/ The Atari Compendium / The Atari Compendium (Toad Computers) (1994).iso / files / prgtools / c / sozobon / sozbin15.zoo / sozdistr / doc / binary.doc / top.chg < prev    next >
Encoding:
Text File  |  1995-09-03  |  12.1 KB  |  298 lines

  1. top version 2.00 eXtended Version
  2. changes by Harun Scheutzow, jerry geiger and Volker Seebode:
  3. version V2.00x24, 95/07/23
  4.     Volker: rewrote code for switch table entires '.dc.w Lxxx-Lyyy'
  5.     fixed bug in rewriting switch table labels
  6.     added code to handle register parm functions if sizeof() type is unsigned long
  7.       (new directive `size_t_long' from HCC pl 34)
  8.     added function prototypes
  9.  
  10. version V2.00x23, 95/06/25
  11.     Volker: fixed register allocation bug. No more "lea ...,Dx"
  12.     (lassign()/reg.c)
  13.  
  14. version V2.00x22
  15.     Volker: full support of A6 relative addressing of vars/parms
  16.     and register restoring needed by functions manipulating the stack
  17.     pointer, like alloca(). Activated in HCC by '#pragma OPT +FRM'
  18.     or '-fframe-relative', passed to TOP with ';frm'. No link/unlk
  19.     statement will be deleted.
  20.     Versions: HCC >= V20x27 and TOP >= V20x22.
  21.  
  22. version V2.00x21
  23.     Volker: switch table entries '.dc.w Lxxx-Lyyy' for
  24.     HCC >= V20x26 and JAS >= V20x10 (compile with -DLABELDIFF)
  25.  
  26. version V2.00x20
  27.     Volker: 'ccr' and 'sr' now handled as REG.
  28.  
  29. version V2.00x19
  30.     Volker: added handling of double (64-bit) return values.
  31.  
  32. version V2.00x18
  33.     Harun: peephole bug fix peephole routines changed (peep2.c)
  34.  
  35. version V2.00x17
  36.     Options switched off by commandline arguments cannot be reactivated
  37.     with '#pragma OPT +<char>' statements.
  38.  
  39. version V2.00x16
  40.     '+u' bug should be fixed now. I hope so - jerry.
  41.     Harun improved his peephole bug fix.
  42.  
  43. version V2.00x15 
  44.     one known bug: sometimes it is better to make use of '-u' option,
  45.     cause top calculates wrong offsets to (sp) after deleting
  46.     link/unlink instructions sometimes
  47.  
  48. Thu Jun 16 1994
  49.     peephole bug;
  50.     deleting of:
  51.         move.l    a3,a4
  52.         move.l    _alles,a3
  53.         move.l    a4,_alles
  54.         with use of a3
  55.     fixed. (Harun Scheutzow did this)
  56.  
  57. Thu Jun 14 1994
  58.     There was still a impossible 'moveq #VAL, dest' generated sometimes.
  59.     error messages output changed, more diagnostics (switches in source)
  60.     in verbose mode
  61.  
  62. version 2.00x14
  63. Mon Mar 7 1994
  64. fixing bugs:
  65. No more 'moveq #VAL, Ax' is generated.
  66.  
  67.  
  68. Feb 19 1994
  69. version 2.00x13
  70. I tried to fix some bugs:
  71. No more 'lea ANY, Dx' is produced.
  72. An exception sometimes occured while testing a non existent bra condition.
  73. Fixed.
  74.  
  75. Option -v and -V now work as you'ld expect:
  76. -v : verbose
  77. -V : print version info
  78.  
  79.  
  80. TOP, Version 2.00x9 ('x9' von uns zwecks Unterscheidbarkeit hinzugefügt)
  81. Stand: 26.08.92
  82.  
  83. Kurzübersicht/Zusammenfassung der Änderungen am SOZOBON-Optimizer TOP,
  84. die von Christian Wempe und Holger Weets durchgeführt wurden:
  85.  
  86. Zunächst die schlechte Nachricht:
  87. In der Original-Version 2.00 hatte sich außer der neuen Option '-g'
  88. praktisch so gut wie überhaupt nichts verändert. Alle Fehler waren
  89. noch drin, und es waren keinerlei neue Optimierungen enthalten.
  90. Somit tragen wir die Verantwortung für alle Fehler, die mit dem neuen
  91. Optimizer auftreten, und mit dem alten nicht. Natürlich können wir
  92. dafür in keiner Weise haftbar gemacht werden, die Benutzung erfolgt
  93. auf eigene Gefahr. Jeder Benutzer erkennt dies mit dem ersten Starten
  94. des Programmes an.
  95.  
  96. Allgemeines
  97. -----------
  98. - alle uns bekannten Fehler konnten beseitigt werden
  99. - TOP wurde auf Geschwindigkeit und Länge optimiert
  100.    - binäres statt lineares Suchen
  101.    - Zeiger statt Arrays
  102.    - intelligenteres ausführen der Register-Analyse
  103.    - Zusammenfassen von Peephole changes
  104.    - System-Nahes I/O - Handling
  105. - TOP läuft jetzt ohne Änderungen auf ATARI und Amiga
  106. - Die bereits eingebauten Optimierungen wurden wesentlich verbessert,
  107.   und sehr viele neue hinzugefügt (siehe unten)
  108. - Die Zusammenarbeit mit dem Compiler (XCC) wurde verbessert.
  109.   Dieser erzeugt einige neue Hinweise im Text, welche TOP für bessere
  110.   Optimierung nutzt;
  111.       Für Insider:
  112.       ;loop Lx       -- wird für loop rotations verwendet, Lx ist das
  113.                         Label, welches am Anfang der Schleifen-Bedingung
  114.                         steht
  115.       ;ret  (d|a)0   -- wird zum Löschen von überflüssigen Zeilen ver-
  116.                         wendet; das Argument (d0 oder a0) gibt dabei an,
  117.                         in welchem Register das Funktions-Ergebnis zurück-
  118.                         gegeben wird.
  119.                         Bisher hat TOP bei jeder Funktion angenommen, das
  120.                         sie ein Ergebnis in D0 zurückgibt, und demzufolge
  121.                         weniger Instruktionen gelöscht
  122.       ;sstart
  123.       ;send          -- dient zum umsortieren von switches
  124.       ;longs         -- reicht die '-L' (int = long) Option an den TOP weiter
  125.       ;notop         -- schaltet die Optimierung für die aktuelle Funktion
  126.                         aus, es werden nur noch die Blöcke sortiert
  127.                         (praktisch zum debuggen!)
  128.       ;xhcc          -- nur wenn dies im Text steht, wird die ';ret' Direktive
  129.                         verwendet; somit läuft TOP jetzt auch mit anderen
  130.                         Versionen des SOZOBON-Compilers zusammen
  131.       ;opt [options] -- hiermit können die Optionen des TOP funktionsweise
  132.                         ein- und ausgeschaltet werden, wobei '+<c>' die Option
  133.                         <c> einschaltet, und '-<c>' sie ausschaltet; diese
  134.                         Schalter können im C-Quelltext per '#pragma' in den
  135.                         Assembler-Text gebracht werden. Siehe dazu die Datei
  136.                         HCC.CHG
  137.       ;debug [fkt]   -- aktuell noch nicht verwendet, kommt später im Zu-
  138.                         sammenhang mit der Debug-Option des Compilers zum
  139.                         Tragen
  140.  
  141.       ;var ...       -- im Original bereits enthalten, gibt Namen, Größe
  142.                         und Stack-Position einer lokalen Variablen an
  143.       ;reg ...       -- im Original bereits enthalten, gibt Namen und Register
  144.                         einer lokalen Variablen an
  145.       ;rega ...      -- gibt Namen, Größe und Stack-Position eines lokalen
  146.                         Zeigers an
  147.  
  148. ACHTUNG:  BEI EINGESCHALTETER -C OPTION UNSERE VERSION DER XDLIBS
  149.           SOWIE UNSERE FLOAT-BIBLIOTHEK VERWENET WERDEN !!!
  150.  
  151. Erweiterungen
  152. -------------
  153. - Loop rotations wurden implementiert. Hierbei handelt es sich um eine
  154.   reine Geschwindigkeits-Optimierung, daß Programm wird dadurch weder
  155.   kürzer noch länger.
  156.   Nachtrag: unter Umständen kann es passieren, daß eine zusätzliche
  157.             branch-Anweisung eingefügt werden muß, daß Programm könnte
  158.             also doch etwas länger werden; am Besten ausprobieren.
  159.   Abschaltbar wie bisher mit '-l'
  160.  
  161. - Block-Optimierung wurde implementiert. Hierbei handelt es sich um eine
  162.   reine Längen-Optimierung, daß Programm wird also nicht schneller, und
  163.   wenn '-q' (siehe unten) aktiviert ist, auch nicht langsamer. Abschaltbar
  164.   sind diese mit '-j' (j für 'join')
  165.  
  166. - Mittels der Option '-q' erzeugt TOP schnelleren, ansonsten kürzeren
  167.   Code. Bei manchen Optimierungen ist es nämlich so, daß sie das
  168.   Programm wesentlich schneller, aber auch länger machen, und in diesen
  169.   Fällen wird jetzt durch die Option entschieden, was zu tun ist
  170.  
  171. - Es wurden viele neue peephole changes implementiert. Insbesondere kann
  172.   TOP nun endlich auch ganze C-Anweisungen entfernen, wenn sie über-
  173.   flüssig sind.
  174.  
  175. - Das 'registerizing' wurde dahingehend verbessert, daß nun wenn möglich
  176.   die Register d0-d2 und a0-a2 verwendet werden. Dies ist also eine reine
  177.   Geschwindigkeits-Optimierung, da hierduch die movem-Anweisungen kürzer
  178.   werden bzw ganz entfallen.
  179.  
  180. - Es werden jetzt bei Bedarf auch Adress-Register verwendet, um lokale
  181.   Variablen und Parameter aufzunehmen. Dies betrifft insbesondere auch
  182.   lokale Arrays und Strukturen.
  183.  
  184. - es wurden Peephole changes implementiert, welche auch über mehrere
  185.   Blöcke hinweg arbeiten können, und dabei beliebig viele Instruktionen
  186.   manipulieren (in der Ausgabe: 'peephole changes (X)')
  187.  
  188. - wenn Schleifen rotiert werden, dann kann bei bestimmenten Schleifentypen
  189.   noch mehr optimiert werden (in der Ausgabe: 'branches refixed')
  190.  
  191. - wenn möglich, werden die link/unlk - Anweisungen entfernt. Da dies z.B.
  192.   bei Verwendung der Funktion alloca() Probleme geben kann, ist dieses
  193.   Feature abschaltbar mit '-u'.
  194.  
  195. - bei Aufrufen der Bibliotheks-Funktionen
  196.       strcmp()    strcpy()    strcat()    strlen()    strchr()    strrchr()
  197.       stricmp()   strlwr()    strupr()    strrev()    strpos()    bzero()
  198.       memcpy()    lmemcpy()   memmove()   lmemmove()  memccpy()   memchr()
  199.       memcmp()    memicmp()   memset()    memswap()   stradj()    strcspn()
  200.       stristr()   strncat()   strncmp()   strncpy()   strnicmp()  strnset()
  201.       strpbrk()   strpcpy()   strrpbrk()  strrpos()   strset()    strspn()
  202.       strstr()    strtok()    strtrim()   substr()    subnstr()
  203.       basename()  suffix()
  204.   werden die Parameter in Registern übergeben (und nicht auf dem Stack).
  205.   Gleiches gilt für die intern für 'long' Berechnungen verwendeten
  206.   Funktionen
  207.       lmul, lmulu, ldiv, ldivu, lrem, lremu
  208.   und die intern für Floatingpoint-Berechnungen verwendeten Funktionen
  209.       fpmul, fpdiv, fpadd, fpsub, fpcmp, fpneg, fpltof, fpftol
  210.  
  211.   Diese Form des Aufrufes ist
  212.   - schneller und kürzer
  213.     (Stack-Korrektur sowie das Laden der Parameter vom Stack entfällt)
  214.   - läuft aber nur noch mit unserer Version der XDLibs
  215.   - und abschaltbar mit '-c'
  216.   ACHTUNG: Die oben aufgezählten Funktionen sind speziell für die Register-
  217.            Parameter-Übergabe umgeschrieben worden, und sollten keinesfalls
  218.            durch Eigenkonstruktionen ersetzt werden !!!!
  219.   Bei den oben aufgeführten Funktionen wird seit V2.00x6 ein Parameter-
  220.   Test durchgeführt. Der TOP warnt z.B. bei Anweisungen wie
  221.       "strlwr(str1, str2);", weil die Funktion strlwr() mit nur einem Parameter
  222.   aufgerufen wird.
  223.  
  224. - Die Funktionen werden so umsortiert, daß a() vor b() steht, wenn a()
  225.   von b() aufgerufen wird
  226.   -> der Assembler kann mehr bsr.s statt jsr/bsr verwenden, was kürzer
  227.      ist
  228.   Dies ist abschaltbar mit '-f'
  229.  
  230. - ATARI:
  231.    Aufrufe von Funktionen, die in der selben Datei stehen, werden PC-
  232.    relativ gemacht.
  233.   AMIGA:
  234.    Alle Funktions-Aufrufe werden PC-relativ gemacht.
  235.   Dies ist abschaltbar mit '-a'.
  236.  
  237. - damit es nicht so langweilig wird, zeigt TOP jetzt immer an, welche
  238.   Funktion gerade optimiert wird
  239.  
  240. - Mehrere Variablen k÷nnen sich jetzt ein Register teilen, dadurch k÷nnen
  241.   eventuell noch mehr Variablen registert werden, wodurch der Code sowohl
  242.   kⁿrzer als auch schneller wird. (in der Ausgabe: 'registers joined')
  243.   Dies ist abschaltbar mit '-m' und ist nur eingeschaltet, wenn das
  244.   Registerizing (-r) auch eingeschaltet ist.
  245.  
  246. Bugs
  247. ----
  248. Aktuell sind uns keine Fehler des Optimizers bekannt, wegen der
  249. Komplexität des Optimierungs-Prozesses sind diese jedoch nie
  250. auszuschliessen.
  251. Wenn also Fehler gefunden werden, dann wie folgt vorgehen:
  252. 1. Programm ohne TOP übersetzen und prüfen, ob der Fehler nicht
  253.    vielleicht trotzdem auftritt...
  254.  
  255. 2. Nachsehen, ob in der fehlerhaften Datei der Inline-Assembler ver-
  256.    wendet wurde ( asm() ); falls ja, liegt der Fehler aller Wahr-
  257.    scheinlichkeit nach daran, daß dort Code erzeugt wurde, welcher
  258.    den TOP irritiert:
  259.    - '.dc' - Anweisungen im TEXT-Segment
  260.       Abhilfe: die Daten ins DATA-Segment verfrachten (mit '.data')
  261.    - Kommentare der Form, wie sie vom Compiler geschrieben werden (s.o.)
  262.       Abhilfe: nach dem ';' ein Leerzeichen machen
  263.    - diverse Code-Sequenzen, die der Compiler nie erzeugt
  264.       Abhilfe: alle Funktionen, die den Inline-Assembler verwenden,
  265.                in eine separate Datei verschieben, und diese ohne
  266.                Optimizer übersetzen, oder die betreffenden Funktionen
  267.                mit '#pragma +TOP' / '#pragma -TOP' klammern
  268.  
  269. 3. die Datei, in der TOP den Fehler macht, vom Compiler übersetzen
  270.    lassen
  271.  
  272. 4. die so erhaltene Datei (*.S) auf eine Diskette kopieren
  273.    (kopieren der *.C - Datei wäre hilfreich, aber nicht unbedingt
  274.    erforderlich)
  275.  
  276. 5. Alles aufschreiben, was zu dem Fehler bekannt ist
  277.    - in welcher Funktion tritt er auf
  278.    - welche Optionen des TOP müssen angegeben werden, damit der Fehler
  279.      nicht mehr auftritt
  280.       -  zuerst die Peephole changes abschalten, danach funktioniert
  281.          wahrscheinlich bereits alles wieder
  282.       -  falls der Fehler immer noch auftritt, jetzt die restlichen
  283.          Optionen probieren.
  284.          Soblald der Fehler nicht mehr auftritt, soviele Optimierungen wie
  285.          möglich wieder einschalten (um die Optimierungs-Art einzugrenzen,
  286.          an der es wirklich lag)
  287.    - wie äußert sich der Fehler (Berechnung falsch, Bomben, etc)
  288.  
  289. Christian & Holger
  290.  
  291.  
  292.  
  293.  
  294.  
  295.  
  296.  
  297.  
  298.